package com.miniapp.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.miniapp.dto.PageDTO;
import com.miniapp.dto.SimpleSearchDTO;
import com.miniapp.dto.form.MiniAppCreateDTO;
import com.miniapp.entity.MiniUserProductEntity;
import com.miniapp.entity.enums.MiniVersionStatus;
import com.miniapp.utils.R;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * 用户产品
 *
 * @author linyuchi
 * @email xunli-03@163.com
 * @date 2018-04-14 16:44:39
 */
public interface MiniUserProductService extends BaseService<MiniUserProductEntity> , IService<MiniUserProductEntity> {


    /**
     * 查询用户购买产品
     * @return
     * @param userId 用户ID
     */
    List<MiniUserProductEntity> findByBuyUserId(Long userId);

    /**
     * 用户创建小程序
     * @param miniAppCreateDTO
     * @param userId
     * @param request
     * @return
     */
    R createMiniapp(MiniAppCreateDTO miniAppCreateDTO, Long userId, HttpServletRequest request);

    /**
     * 通过appid查询产品
     * @param appid
     * @return
     */
    MiniUserProductEntity findByAppid(String appid);

    /**
     * 通过g
     * @param wxGxId
     */
    MiniUserProductEntity findByWxGhId(String wxGxId);

    /**
     * 变更版本信息
     * @param miniUserProduct
     * @param key
     * @return
     */
    R changeStatus(MiniUserProductEntity miniUserProduct, MiniVersionStatus key);

    /**
     * 改小程序是否已经被绑定
     * @param wxAppID
     * @param id
     * @return
     */
    boolean isBand(String wxAppID, Long id);

    /**
     * 续费,更新续费情况
     * @param miniUserProduct
     * @param request
     * @param userId
     */
    R updateRenew(MiniUserProductEntity miniUserProduct, HttpServletRequest request, Long userId);

    /**
     * 分页查询
     * @param simpleSearchDTO
     * @return
     */
    PageDTO<MiniUserProductEntity> findPageBySql(SimpleSearchDTO simpleSearchDTO);

    /**
     * 通过wxappid  查询产品
     * @param authorizerAppid
     * @return
     */
    MiniUserProductEntity findByWxAppid(String authorizerAppid);

    /**
     * 提交代码审核
     * @param appid 项目APPID
     * @return
     */
    R commitByAppid(String appid);

    /**
     *  产品升级
     * @param ids
     * @return
     */
    R upgrade(Long[] ids);
}

